﻿using WMS.FC.Domain.DomainObject.System;
using WMS.FC.Domain.PersistenceObject.Business;

namespace WMS.FC.Domain.Repository
{
    public interface ITechnologyRepository : IRepositoryBase
    {
        /// <summary>
        /// 获取全部工艺路径
        /// </summary>
        /// <returns></returns>
        Task<List<TechnologyRoutePO>> GetAllTechnologyRouteList();

        /// <summary>
        /// 获取工艺路径工序
        /// </summary>
        /// <returns></returns>
        Task<List<TechnologyRouteProcessPO>> GetTechnologyRouteProcessList(string technologyRouteCode);

        /// <summary>
        /// 获取工艺路径最大序号
        /// </summary>
        /// <returns></returns>
        Task<int> GetMaxTechnologyRouteSortNumber();

        /// <summary>
        /// 变更托盘组工艺
        /// </summary>
        /// <param name="trayBarcodeList"></param>
        /// <param name="technologyRouteCode"></param>
        /// <param name="technologyProcessCode"></param>
        /// <param name="userInfo"></param>
        /// <returns></returns>
        Task<int> ChangeTrayListTechnology(List<string> trayBarcodeList, string technologyRouteCode, string technologyProcessCode, UserInfo userInfo);

        /// <summary>
        /// 变更托盘电池工艺
        /// </summary>
        /// <param name="trayBarcodeList"></param>
        /// <param name="technologyRouteCode"></param>
        /// <param name="technologyProcessCode"></param>
        /// <param name="userInfo"></param>
        /// <returns></returns>
        Task<int> ChangeCellListTechnology(List<string> trayBarcodeList, string technologyRouteCode, string technologyProcessCode, UserInfo userInfo);

        /// <summary>
        /// 获取工艺路径
        /// </summary>
        /// <param name="technologyRouteCode"></param>
        /// <returns></returns>
        Task<TechnologyRoutePO?> GetTechnologyRoute(string technologyRouteCode);

        /// <summary>
        /// 获取工艺工序
        /// </summary>
        /// <param name="technologyProcessCode"></param>
        /// <returns></returns>
        Task<TechnologyProcessPO?> GetTechnologyProcess(string technologyProcessCode);

        /// <summary>
        /// 获取工艺路径工序
        /// </summary>
        /// <param name="technologyRouteCode"></param>
        /// <param name="technologyProcessCode"></param>
        /// <returns></returns>
        Task<TechnologyRouteProcessPO?> GetTechnologyRouteProcess(string technologyRouteCode, string technologyProcessCode);

        /// <summary>
        /// 获取产线站台绑定工艺路径
        /// </summary>
        /// <param name="lineCode"></param>
        /// <param name="stationCode"></param>
        /// <returns></returns>
        Task<LineTechnologyRoutePO?> GetLineStaionBindTechnologyRoute(string lineCode, string stationCode);

        /// <summary>
        /// 获取产线工艺工序路径
        /// </summary>
        /// <param name="lineCode"></param>
        /// <param name="technologyProcessCode"></param>
        /// <returns></returns>
        Task<LineTechnologyProcessRoutePO?> GetLineTechnologyProcessRoute(string lineCode, string technologyProcessCode);
    }
}
